/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package endereco.db;


import conexao.ConexaoSingleton;
import conexao.DAOException;
import endereco.classes.Endereco;
import java.sql.SQLException;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.Query;

/**
 *
 * @author Wolverine
 */
public class EnderecoDao implements IEnderecoDao {
    EntityManager manager;

    public EnderecoDao() throws DAOException {
       try{
            this.manager = ConexaoSingleton.getConexao();
        } catch (SQLException ex) {
            throw  new DAOException(null, "Sem conexão com o Banco dados");
        }
    }
    //Metodo para consultar endereços a partir de uma String
    public List<Endereco> consultarEndereco(String logradouro) throws DAOException{
        try{
            Query q = manager.createNamedQuery("pesquisaEndereco");
            q.setParameter("nomeLogradouro", "%" + logradouro);
            return q.getResultList();
        }catch(Exception ex){
            throw new DAOException("Erro de consulta", ex);
        }
    }

    // Metodop para consular um endereco a partir do CEP
    public Endereco consultarCep(String cep){
        Query query = manager.createQuery("select e from Endereco e where (cep='" + cep + "')");
        return (Endereco) query.getSingleResult();
    }

    //Metodo para adicionar um novo endereço
    public void adicionaEndereco(Endereco endereco) throws DAOException {
        try{
            manager.getTransaction().begin();
            manager.persist(endereco);
            manager.getTransaction().commit();
          }catch(Exception ex){
              if (manager.getTransaction().isActive()){
                  manager.getTransaction().rollback();
              }
              throw new DAOException("Erro ao Salvar no Banco de Dados", ex);
          }
    }

}
